package com.fcscs.cservice.gwt.client;

import java.util.Date;
import java.util.List;

import com.fcscs.core.common.SearchResultsContainer;
import com.fcscs.cservice.common.CServiceCommonEnums.BookingStatus;
import com.fcscs.cservice.common.CServiceCommonEnums.BookingViewOrderBy;
import com.fcscs.cservice.common.CServiceCommonEnums.GuestProfileType;
import com.fcscs.cservice.domain.BookingBase;
import com.fcscs.cservice.domain.model.BookingIdAndMessage;
import com.fcscs.cservice.domain.model.BookingIdAndStatus;
import com.fcscs.cservice.domain.model.BookingUpdate;
import com.fcscs.cservice.domain.model.BookingView;
import com.fcscs.cservice.domain.model.NonInHouseGuestProfile;
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface BookingServiceAsync {

	void updateBookingStatus(long propId,List<BookingIdAndStatus> idstatus,AsyncCallback<List<BookingIdAndMessage>> callback);

	void getBookingHistory(long propId, long guestId, int start, int resultCnt,AsyncCallback<SearchResultsContainer<BookingView>> callback);

	void simFindBookings(long propId, Long restaurantId,String term,Date reservationDate,int start, int resultCnt,AsyncCallback<SearchResultsContainer<BookingView>> callback);
	
	void findBookings(long propId, Long restaurantId, String term,String firstName, String lastName, String mobileNo,GuestProfileType guestType,Date reservationDate,
					List<BookingStatus> statuses,Date startDate,Date endDate, int start,int resultCnt, BookingViewOrderBy orderBy, boolean sortDesc,
					AsyncCallback<SearchResultsContainer<BookingView>> callback);

	void createBooking(BookingBase bkBase, NonInHouseGuestProfile nonInGuest,AsyncCallback<BookingView> callback);

	void delete(BookingBase loc, AsyncCallback<Boolean> callback);

	<E extends BookingBase> void get(E cls, long id, AsyncCallback<BookingBase> callback);

	void get(long id, AsyncCallback<BookingBase> callback);

	void permDelete(BookingBase loc, AsyncCallback<Void> callback);

	void save(BookingBase loc, AsyncCallback<BookingBase> callback);

	void updateBooking(BookingUpdate bookingUpdate,AsyncCallback<BookingView> callback);
	
}
